package com.yhn.shortlink.admin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yhn.shortlink.admin.dto.req.user.UserLoginReqDTO;
import com.yhn.shortlink.admin.dto.req.user.UserRegisterReqDTO;
import com.yhn.shortlink.admin.dto.req.user.UserUpdateReqDTO;
import com.yhn.shortlink.admin.dto.resp.user.UserLoginRespDTO;
import com.yhn.shortlink.admin.dto.resp.user.UserRespDTO;
import com.yhn.shortlink.common.entity.UserDO;

/**
 * @author 86177
 * @description 针对表【user】的数据库操作Service
 * @createDate 2024-07-21 13:25:47
 */
public interface UserService extends IService<UserDO> {

    /**
     * 根据用户名称查询用户
     *
     * @param userName 用户名
     * @return 用户脱敏实体
     */
    UserRespDTO getUserByUserName(String userName);

    /**
     * 查询用户名是否存在
     *
     * @param userName 用户名
     * @return 是否存在
     */
    Boolean availableUsername(String userName);

    /**
     * 用户注册
     *
     * @param userRegisterReqDTO 用户注册请求
     */
    Boolean register(UserRegisterReqDTO userRegisterReqDTO);

    /**
     * 由于进行分表，因此要新增查询条件根据username分片
     *
     * @param userUpdateReqDTO 用户修改请求
     */
    Boolean updateInfo(UserUpdateReqDTO userUpdateReqDTO);

    /**
     * 用户登录
     *
     * @param userLoginReqDTO 登录请求
     * @return token
     */
    UserLoginRespDTO login(UserLoginReqDTO userLoginReqDTO);

    /**
     * 判断用户是否登录
     *
     * @param token token
     * @return 是否登录
     */
    Boolean checkLogin(String username, String token);

    /**
     * 用户退出登录
     */
    Boolean logout(String username, String token);
}
